package user_handler

import (
	"peilian-api/app/global/bind"
	"peilian-api/app/model"
	"peilian-api/app/services/user_service"
	"peilian-api/utils/format"

	"github.com/gin-gonic/gin"
)

// 学生管理员设置 -- 添加用户信息
func AddStudent(ctx *gin.Context) {
	// 绑定参数
	var ar model.AddStudentRequest
	if err := bind.ShouldBinding(ctx, &ar); err != nil {
		format.NewResponseJson(ctx).Err(30001, err.Error())
		return
	}

	err := user_service.AddStudent(ctx, ar)
	if err != nil {
		format.NewResponseJson(ctx).Err(err.Code, err.Err.Error())
		return
	}
	format.NewResponseJson(ctx).Success(make([]interface{}, 0))
}

// 更新用户信息
func UpdateStudent(ctx *gin.Context) {
	// 绑定参数 使用添加用户名信息
	var ar model.UpdateStudentRequest
	if err := bind.ShouldBinding(ctx, &ar); err != nil {
		format.NewResponseJson(ctx).Err(30001, err.Error())
		return
	}
	err := user_service.UpdateStudent(ctx, ar.Id, ar)
	if err != nil {
		format.NewResponseJson(ctx).Err(30002, err.Error())
		return
	}
	format.NewResponseJson(ctx).Success(make([]interface{}, 0))
}

// 删除用户信息
func DeleteByIdStudent(ctx *gin.Context) {
	var ud model.DeleteStudentRequest
	if err := bind.ShouldBinding(ctx, &ud); err != nil {
		format.NewResponseJson(ctx).Err(30001, err.Error())
		return
	}
	err := user_service.DeleteByIdStudent(ctx, ud.Id)
	if err != nil {
		format.NewResponseJson(ctx).Err(30001, err.Error())
		return
	}
	format.NewResponseJson(ctx).Success(make([]interface{}, 0))
}

// 查询用户信息
func GetStudent(ctx *gin.Context) {
	var gr model.GetStudentRequest
	if err := bind.ShouldBinding(ctx, &gr); err != nil {
		format.NewResponseJson(ctx).Err(30001, err.Error())
		return
	}
	count, out, err := user_service.GetUserInfoStudent(ctx, gr)
	if err != nil {
		format.NewResponseJson(ctx).Err(30002, err.Error())
		return
	}
	format.NewResponseJson(ctx).SuccessDataList(int(count), out)
}

// 查询用户信息(外部访问)
func APIGetStudent(ctx *gin.Context) {
	var gr user_service.GetStudentReq
	if err := bind.ShouldBinding(ctx, &gr); err != nil {
		format.NewResponseJson(ctx).Err(30001, err.Error())
		return
	}
	count, out, err := user_service.GetUserStudentInfo(ctx, gr)
	if err != nil {
		format.NewResponseJson(ctx).Err(30002, err.Error())
		return
	}
	format.NewResponseJson(ctx).SuccessDataList(int(count), out)
}

// 查询用户信息
func GetStudentY(ctx *gin.Context) {
	var gr model.GetStudentYRequest
	if err := bind.ShouldBinding(ctx, &gr); err != nil {
		format.NewResponseJson(ctx).Err(30001, err.Error())
		return
	}
	count, out, err := user_service.GetUserInfoStudentY(ctx, gr)
	if err != nil {
		format.NewResponseJson(ctx).Err(30002, err.Error())
		return
	}
	format.NewResponseJson(ctx).SuccessDataList(int(count), out)
}

// 重置学生账号密码信息
func ResetStuPwd(ctx *gin.Context) {
	var rsp model.ResetStudentPwdRequest
	if err := bind.ShouldBinding(ctx, &rsp); err != nil {
		format.NewResponseJson(ctx).Err(30001, err.Error())
		return
	}
	err := user_service.ResetStudentPwd(ctx, rsp)
	if err != nil {
		format.NewResponseJson(ctx).Err(err.Code, err.Err.Error())
		return
	}
	format.NewResponseJson(ctx).SuccessObj(struct{}{})
}

// 导入学生数据
func ImportStudent(ctx *gin.Context) {
	sum, sucNum, errNum, errorUrl, err := user_service.ImportStudentInfo(ctx)
	if err != nil {
		format.NewResponseJson(ctx).ErrObj(30002, err.Error())
		return
	}
	format.NewResponseJson(ctx).SuccessObj(model.ImportResp{Sum: sum, SucNum: sucNum, ErrNum: errNum, ErrorUrl: errorUrl})
}

// 判断学生服务是否过期
func JudgeService(ctx *gin.Context) {
	b, err := user_service.JudgeService(ctx)
	if err != nil {
		format.NewResponseJson(ctx).SuccessObj(struct {
			IsTimeout bool `json:"is_timeout"`
		}{IsTimeout: b})
		return
	}
	format.NewResponseJson(ctx).SuccessObj(struct {
		IsTimeout bool `json:"is_timeout"`
	}{IsTimeout: b})
}
